#coding = utf-8

'''
作者：tiandongjun
功能：py转exe
版本：1.0
日期：
2019-08-30 1.0：可以运行
'''

import os,time, datetime
import time
import datetime

files = os.listdir()
file_names = []
for f in files:
	if os.path.splitext(f)[1] == '.py':
		file_names.append(f)
file_names.remove('pyinstaller_v2.py')
for x in range(len(file_names)):
    print(str(x+1)+' : '+ file_names[x])
inpt = input('选择第几个文件生成exe：')

try:
    inp = int(inpt)
except Exception as e:
    print("所有文件生成exe!")
else:
    if inp > 0 and inp <= len(file_names):
        file_names = [file_names[inp-1]]
        print(file_names)
    else:
        print("所有文件生成exe!")


'''把时间戳转化为时间: 1479264792 to 2016-11-16 10:53:12'''
def TimeStampToTime(timestamp):
    timeStruct = time.localtime(timestamp)
    return time.strftime('%Y-%m-%d %H:%M:%S',timeStruct)


'''获取文件的大小,结果保留两位小数，单位为MB'''
def get_FileSize(filePath):
    #filePath = unicode(filePath,'utf8')
    fsize = os.path.getsize(filePath)
    fsize = fsize/float(1024*1024)
    return round(fsize,2)


'''获取文件的访问时间'''
def get_FileAccessTime(filePath):
    #filePath = unicode(filePath,'utf8')
    t = os.path.getatime(filePath)
    return TimeStampToTime(t)


'''获取文件的创建时间'''
def get_FileCreateTime(filePath):
    #filePath = unicode(filePath,'utf8')
    t = os.path.getctime(filePath)
    return TimeStampToTime(t)
    
'''获取文件的修改时间'''
def get_FileModifyTime(filePath):
    #filePath = unicode(filePath,'utf8')
    t = os.path.getmtime(filePath)
    return TimeStampToTime(t)

def os_func():
    print(os.path.abspath(path))	#返回绝对路径
    print(os.path.basename(path))	#返回文件名
    
    x = os.path.split(path)  #把路径分割成dirname和basename，返回一个元组
    print(x)
    x = os.path.splitdrive(path)   #一般用在windows下，返回驱动器名和路径组成的元组
    print(x)
    x = os.path.splitext(path)  #分割路径，返回路径名和文件扩展名的元组
    print(x)
    x = os.path.splitunc(path)  #把路径分割为加载点与文件
    print(x)
rets = []
for file_name in file_names:
    if not os.path.isfile(file_name):
        continue
    distfile = 'dist/' + file_name.split('.')[0] + '.exe'
    if os.path.isfile(distfile): #如果存在exe文件
        maxt = 0
        '''获取文件的访问时间'''
        t = os.path.getatime(file_name)
        if t > maxt:
            maxt = t
        '''获取文件的创建时间'''
        t = os.path.getctime(file_name)  
        if t > maxt:
            maxt = t
        '''获取文件的修改时间'''
        t = os.path.getmtime(file_name)
        if t > maxt:
            maxt = t
        filemaxt = maxt  # 获得文件的最近时间
        
        maxt = 0
        '''获取文件的访问时间'''
        t = os.path.getatime(distfile)
        if t > maxt:
            maxt = t
        '''获取文件的创建时间'''
        t = os.path.getctime(distfile)  
        if t > maxt:
            maxt = t
        '''获取文件的修改时间'''
        t = os.path.getmtime(distfile)
        if t > maxt:
            maxt = t
        distmaxt = maxt
        if True:#filemaxt > distmaxt: # 如果py比exe时间新则重新生成exe                 
            command="pyinstaller.exe -F " + '"' + file_name +'"'
            print(command)
            print()
            ret = os.system(command)
            if ret == 0:
                pass
                #rets.append(command + ' 成功 ')
            else:
                rets.append(command + ' 失败 ')                
        else:
            print("{} 比 {} 新，不需要重新生成".format(distfile,file_name))
            
    else: # 如果不存在exe文件，生成exe文件                
        command="pyinstaller.exe -F " + '"' + file_name +'"'
        print()
        print("******",end='')
        print(command)
        print()
        ret = os.system(command)                    
        if ret == 0:
            pass
            #rets.append(command + ' 成功 ')
        else:
            rets.append(command + ' 失败 ') 
        
print('\n------删除中间文件------------------------')
rootdir = "./"
filelist = os.listdir(rootdir) #列出文件夹下所有的目录与文件    
for file in filelist:  
    if os.path.isfile(file):
        file_name = os.path.splitext(file)[0]
        file_ext = os.path.splitext(file)[1]    
        if file_ext == ".spec":
            command="del " + '"' + file + '"'    #删除.spec
            ret = os.system(command)
            print(command + ' return ' + str(ret))
    if file == "build":
        command="rd /s/q build"    #删除build
        ret = os.system(command)
        print(command + ' return ' + str(ret))    
    if file == "__pycache__":            
        command="rd /s/q __pycache__"    #__pycache__
        ret = os.system(command)
        print(command + ' return ' + str(ret))
if len(rets)>0:
    for _ in rets:
        print(_)
    input("回车退出\n") 